---
title: Operations and processes
summary: End-to-end processing workflows behind the eight UC4 job-invocation operations.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-09-22
---

# Operations and processes

Every operation on this host is invoked through **one route**: `UC4` → `UC4Service`. **Transaction boundary for every process below: none** — the host opens no unit of work, no transaction, and no compensating path; the forward call to the downstream service is the only side effect, and it is not undone if anything after it fails. This page is the process hub; input/output messages, declared faults, and binding facts belong to [Operations](operations.md).

## Process catalog

| ID | Process | Entry operation | Rules enforced |
| --- | --- | --- | --- |
| [OP-001](operations/execute-job.md) | Invoke job by enum environment, no parameters | [`ExecuteJob`](contracts/uc4-service.md#executejob) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-006](business-rules.md#br-uc4-006-enum-operation-forms-are-obsolete), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-009](business-rules.md#br-uc4-009-positional-values-are-named-arg1-arg2), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |
| [OP-002](operations/execute-job-with-client-id.md) | Invoke job by client id, no parameters | [`ExecuteJobWithClientId`](contracts/uc4-service.md#executejobwithclientid) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-009](business-rules.md#br-uc4-009-positional-values-are-named-arg1-arg2), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |
| [OP-003](operations/execute-job-with-json.md) | Invoke job by enum environment, JSON parameters | [`ExecuteJobWithJson`](contracts/uc4-service.md#executejobwithjson) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-006](business-rules.md#br-uc4-006-enum-operation-forms-are-obsolete), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field), [BR-UC4-013](business-rules.md#br-uc4-013-json-parameters-parsed-before-the-allow-deny-gate) |
| [OP-004](operations/execute-job-with-json-and-client-id.md) | Invoke job by client id, JSON parameters | [`ExecuteJobWithJsonAndClientId`](contracts/uc4-service.md#executejobwithjsonandclientid) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-004](business-rules.md#br-uc4-004-job-name-must-not-be-null), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field), [BR-UC4-013](business-rules.md#br-uc4-013-json-parameters-parsed-before-the-allow-deny-gate) |
| [OP-005](operations/execute-job-with-values.md) | Invoke job by enum environment, positional values | [`ExecuteJobWithValues`](contracts/uc4-service.md#executejobwithvalues) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-006](business-rules.md#br-uc4-006-enum-operation-forms-are-obsolete), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-009](business-rules.md#br-uc4-009-positional-values-are-named-arg1-arg2), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |
| [OP-006](operations/execute-job-with-values-and-client-id.md) | Invoke job by client id, positional values (canonical flow) | [`ExecuteJobWithValuesAndClientId`](contracts/uc4-service.md#executejobwithvaluesandclientid) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-004](business-rules.md#br-uc4-004-job-name-must-not-be-null), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-009](business-rules.md#br-uc4-009-positional-values-are-named-arg1-arg2), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |
| [OP-007](operations/execute-job-with-parameters.md) | Invoke job by enum environment, key/value parameters | [`ExecuteJobWithParameters`](contracts/uc4-service.md#executejobwithparameters) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-006](business-rules.md#br-uc4-006-enum-operation-forms-are-obsolete), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |
| [OP-008](operations/execute-job-with-parameters-and-client-id.md) | Invoke job by client id, key/value parameters | [`ExecuteJobWithParametersAndClientId`](contracts/uc4-service.md#executejobwithparametersandclientid) | [BR-UC4-001](business-rules.md#br-uc4-001-job-allowed-by-uc4-rules-document), [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment), [BR-UC4-003](business-rules.md#br-uc4-003-rule-evaluation-order-and-match-type), [BR-UC4-004](business-rules.md#br-uc4-004-job-name-must-not-be-null), [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation), [BR-UC4-008](business-rules.md#br-uc4-008-every-invocation-is-traced-at-info), [BR-UC4-010](business-rules.md#br-uc4-010-downstream-service-address-resolved-per-call), [BR-UC4-011](business-rules.md#br-uc4-011-forwarded-job-stamped-with-host-identity), [BR-UC4-012](business-rules.md#br-uc4-012-downstream-result-mapped-field-by-field) |

[BR-UC4-007](business-rules.md#br-uc4-007-job-and-parameter-names-must-not-contain-spaces-declared-not-enforced) (job/parameter name space validation) reaches **no** process: `UC4Service.Validate` has no caller anywhere in this host.

## Cross-process flowchart

`ExecuteJobWithValuesAndClientId` (OP-006) is the canonical flow; the other seven processes are deltas against it — each either prepends an enum-to-client-id conversion, adds a JSON-parsing step, or omits the positional-naming step.

```mermaid
flowchart TD
    ENTRY["Caller invokes one of<br>the eight operations"] --> ENUMCHECK{"Enum-typed<br>operation?"}
    ENUMCHECK -->|"Yes (OP-001,003,005,007)"| CONV["Convert UC4Environment<br>to client id"]
    ENUMCHECK -->|"No (OP-002,004,006,008)"| LOG["Logging: trace INFO"]
    CONV --> LOG
    LOG --> NULLCHECK{"Name ends in<br>AndClientId?"}
    NULLCHECK -->|"Yes"| ENFORCE["Enforce.ArgumentNotNull<br>jobName"]
    NULLCHECK -->|"No"| GATE
    ENFORCE --> JSONCHECK{"JSON form?<br>(OP-003,004)"}
    JSONCHECK -->|"Yes"| PARSE["Parse jsonKeyValuePairs<br>before gate"]
    JSONCHECK -->|"No"| GATE["IsJobAllowed:<br>read uc4.rules, evaluate"]
    PARSE --> GATE
    GATE -->|"blocked"| EMPTY["Return empty UC4Result<br>reason discarded"]
    GATE -->|"allowed"| SHAPE{"values-form?<br>(OP-001,002,005,006)"}
    SHAPE -->|"Yes"| NAME["Name positional values<br>as arg1, arg2, in order"]
    SHAPE -->|"No"| CLIENT
    NAME --> CLIENT["UC4Client: resolve address,<br>stamp host identity, forward job"]
    CLIENT --> MAP["Map downstream result<br>to published UC4Result"]
    MAP --> RESP["Return response"]
    EMPTY --> RESP
    GATE --> FAULT["Unhandled exception<br>surfaced as detailed fault"]
    CLIENT --> FAULT
```

## Transaction boundaries

No process opens a unit of work, a database transaction, or any compensating action. The forward call to the downstream service is the sole side effect of every process, and it is not undone if the response mapping or any later step fails.

## Failure and edge-case behavior

| Condition | Behavior |
| --- | --- |
| `jobName` is null (`ExecuteJobWithJsonAndClientId`, `ExecuteJobWithValuesAndClientId`, or `ExecuteJobWithParametersAndClientId`) | `Enforce.ArgumentNotNull` throws — surfaced as a detailed WCF fault |
| `uc4.rules` document missing or malformed | `NullReferenceException` from an unguarded dereference of `rules.UC4Rules.Environments`* — surfaced as a detailed WCF fault |
| Requested environment has no rule entry | Allowed by default, except environment `100` — see [BR-UC4-002](business-rules.md#br-uc4-002-default-allow-for-unmatched-environment) |
| Job is blocked by the rule set | Caller-visible response is a successful, empty `UC4Result` — not a fault — see [BR-UC4-005](business-rules.md#br-uc4-005-blocked-job-returns-empty-result-with-no-explanation) |
| Malformed `jsonKeyValuePairs` (JSON forms only) | Faults even for a job the rule set would have blocked, because parsing happens before the gate — see [BR-UC4-013](business-rules.md#br-uc4-013-json-parameters-parsed-before-the-allow-deny-gate) |
| Downstream service unreachable or throws | Propagates unchanged as a detailed WCF fault — no retry, circuit breaker, or timeout override exists in this host |

## Related documentation
- [Index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Activation and hosting](activation-hosting.md)
- [Operations](operations.md)
- [Faults and error pipeline](faults.md)
- [Authentication and authorization](authentication-authorization.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Business rules](business-rules.md)
- [Operational runbook](operational-runbook.md)
- [Tech debt](tech-debt.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts.

## Sources
- `src/WCF/SAIF.Services.WCF.UC4.Host/UC4Service.cs`
- `src/WCF/SAIF.Services.WCF.UC4.Host/Uc4Client.cs`
- `src/WCF/SAIF.Services.WCF.UC4.Host/UC4JobRules.cs`
